package com.demo.其它;

/**
 * @author cl
 */
public class YiHuo {
    public static void main(String[] args) {
        int[] demo1 = {1, 2, 3, 4, 4, 3, 1};
        System.out.println("案例1：" + demo1(demo1));

        int[] demo2 = {1, 2, 3, 4, 4, 3, 1, 7};
        System.out.println("案例2：");
        demo2(demo2);

    }

    public static int demo1(int[] arr) {
        // 0 ^ a = a
        int t = 0;
        for (int e : arr) {
            t = t ^ e;
        }
        return t;
    }

    private static void demo2(int[] arr) {
        int ero = 0;
        // 此时的ero 为两个单数的亦或结果
        for (int e : arr) {
            ero = ero ^ e;
        }

        // 取得ero 右边第一个为1的数
        int index = ero & (~ero + 1);

        int ero1 = 0;
        for (int e : arr) {
            if ((e & index) == 0) {
                // index 位置是0的数
                ero1 = ero1 ^ e;
            }
        }
        System.out.println("第一个数为: " + (ero ^ ero1) + " 第二个数为: " + ero1);
    }
}
